﻿using System;
using ContractManager.BLL.Business;
using ContractManager.Common.Class;
using ContractManager.Common.FormBase;
using ContractManager.Entity;

using System.Windows.Forms;
using DevExpress.XtraEditors;

namespace ContractManager.Lists.Forms
{
    public partial class FrmDictDetails : XtraFormBase
    {
        #region "Private Variable"
        
        public bool SaveClose;
        public bool SaveNew;
        public bool OnlyView;
        public int MasterId;

        #endregion

        #region "Form Construction"
        public FrmDictDetails()
        {
            InitializeComponent();
        }
        #endregion

        #region "Private Method"

        private void BlankForm()
        {
            txtCode.EditValue = null;
            txtName.EditValue = null;
            txtAddress.EditValue = null;
            txtDescription.EditValue = null;
            
        }

        private void GetDetail()
        {
            var detail = new object();
            string code = "";
            string name = "";
            string description = "";

            switch (FormType)
            {
                case 1:
                    detail = ClsCategories.SelectByPk(MasterId);
                    code = ((Categories) detail).CatCode;
                    name = ((Categories) detail).CatName;
                    description = ((Categories) detail).CatDescription;
                    break;
                case 2:
                    detail = ClsContractStatus.SelectByPk(MasterId);
                    code = ((ContractStatus) detail).ConStaCode;
                    name = ((ContractStatus) detail).ConStaName;
                    description = ((ContractStatus) detail).ConStaDescription;
                    break;
                case 3:
                    detail = ClsCapitals.SelectByPk(MasterId);
                    code = ((Capitals) detail).CapCode;
                    name = ((Capitals) detail).CapName;
                    description = ((Capitals) detail).CapDescription;
                    break;
                case 4:
                    detail = ClsExchangeType.SelectByPk(MasterId);
                    code = ((ExchangeType) detail).ExcCode;
                    name = ((ExchangeType) detail).ExcName;
                    description = ((ExchangeType) detail).ExcDescription;
                    break;
                case 5:
                    detail = ClsWorkType.SelectByPk(MasterId);
                    code = ((WorkType) detail).WorkCode;
                    name = ((WorkType) detail).WorkName;
                    description = ((WorkType) detail).WorkDescription;
                    break;
                case 6:
                    detail = ClsResources.SelectByPk(MasterId);
                    code = ((Resources) detail).ResCode;
                    name = ((Resources) detail).ResName;
                    description = ((Resources) detail).ResDescription;
                    break;
                case 7:
                    detail = ClsDocumentTypes.SelectByPk(MasterId);
                    code = ((DocumentTypes) detail).DocTypCode;
                    name = ((DocumentTypes) detail).DocTypName;
                    description = ((DocumentTypes) detail).DocTypDescription;
                    break;
                case 8:
                    detail = ClsInsuranceType.SelectByPk(MasterId);
                    code = ((InsuranceType) detail).InsTypCode;
                    name = ((InsuranceType) detail).InsTypName;
                    description = ((InsuranceType) detail).InsTypDescription;
                    break;
                case 9:
                    detail = ClsContractType.SelectByPk(MasterId);
                    code = ((ContractType) detail).ConTypCode;
                    name = ((ContractType) detail).ConTypName;
                    description = ((ContractType) detail).ConTypDescription;
                    break;
            }
                
            if (detail != null)
            {
                txtCode.EditValue = code;
                txtName.EditValue = name;
                txtAddress.EditValue = description;
                txtDescription.EditValue = description;
                
            }   
        }

        private void DoSaveCategory()
        {
            #region "Check Condition"
            if (!FormIsNotValidate)
            {
                if (!dxValidationProvider.Validate())
                {
                    XtraMessageBox.Show(
                                "Vui lòng nhập đầy đủ thông tin trước khi lưu",
                                "Thông báo",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                    txtCode.SelectAll();
                    txtCode.Focus();
                    return;
                }
            }
            #endregion

            Categories item = MasterId <= 0 ? new Categories() : ClsCategories.SelectByPk(MasterId);
            item.CatId = MasterId;
            item.CatCode = String.Format("{0}", txtCode.EditValue);
            item.CatName = String.Format("{0}", txtName.EditValue);
            item.CatDescription = String.Format("{0}", txtDescription.EditValue);

            try
            {
                if (MasterId > 0)
                {
                    ClsCategories.Update(item); ;
                }
                else
                {
                    ClsCategories.Insert(item);
                    MasterId = item.CatId;
                }
                btnPrint.Enabled = btnDelete.Enabled = MasterId > 0;
                if (SaveNew)
                {
                    BlankForm();
                    txtCode.Focus();
                    MasterId = 0;
                }
                else if (SaveClose)
                {
                    Close();
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(
                    String.Format("Có lỗi xảy ra trong quá trình cập nhật dữ liệu. {0}", ex.Message),
                    "Thông báo",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
        }

        private void DoSaveContractStatus()
        {
            #region "Check Condition"
            if (!FormIsNotValidate)
            {
                if (!dxValidationProvider.Validate())
                {
                    XtraMessageBox.Show(
                                "Vui lòng nhập đầy đủ thông tin trước khi lưu",
                                "Thông báo",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                    txtCode.SelectAll();
                    txtCode.Focus();
                    return;
                }
            }
            #endregion

            ContractStatus item = MasterId <= 0 ? new ContractStatus() : ClsContractStatus.SelectByPk(MasterId);
            item.ConStaID = MasterId;
            item.ConStaCode = String.Format("{0}", txtCode.EditValue);
            item.ConStaName = String.Format("{0}", txtName.EditValue);
            item.ConStaDescription = String.Format("{0}", txtDescription.EditValue);

            try
            {
                if (MasterId > 0)
                {
                    ClsContractStatus.Update(item); ;
                }
                else
                {
                    ClsContractStatus.Insert(item);
                    //MasterId = item.CatId;
                }
                btnPrint.Enabled = btnDelete.Enabled = MasterId > 0;
                if (SaveNew)
                {
                    BlankForm();
                    txtCode.Focus();
                    MasterId = 0;
                }
                else if (SaveClose)
                {
                    Close();
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(
                    String.Format("Có lỗi xảy ra trong quá trình cập nhật dữ liệu. {0}", ex.Message),
                    "Thông báo",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
        }

        private void DoSaveCapitals()
        {
            #region "Check Condition"
            if (!FormIsNotValidate)
            {
                if (!dxValidationProvider.Validate())
                {
                    XtraMessageBox.Show(
                                "Vui lòng nhập đầy đủ thông tin trước khi lưu",
                                "Thông báo",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                    txtCode.SelectAll();
                    txtCode.Focus();
                    return;
                }
            }
            #endregion

            Capitals item = MasterId <= 0 ? new Capitals() : ClsCapitals.SelectByPk(MasterId);
            item.CapId = MasterId;
            item.CapCode = String.Format("{0}", txtCode.EditValue);
            item.CapName = String.Format("{0}", txtName.EditValue);
            item.CapDescription = String.Format("{0}", txtDescription.EditValue);

            try
            {
                //if (MasterId > 0)
                //{
                //    ClsContractStatus.Update(item); ;
                //}
                //else
                //{
                //    ClsContractStatus.Insert(item);
                //    MasterId = item.CatId;
                //}
                btnPrint.Enabled = btnDelete.Enabled = MasterId > 0;
                if (SaveNew)
                {
                    BlankForm();
                    txtCode.Focus();
                    MasterId = 0;
                }
                else if (SaveClose)
                {
                    Close();
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(
                    String.Format("Có lỗi xảy ra trong quá trình cập nhật dữ liệu. {0}", ex.Message),
                    "Thông báo",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
        }


        private void DoSave()
        {
            #region "Check Condition"
            if (!FormIsNotValidate)
            {
                if (!dxValidationProvider.Validate())
                {
                    XtraMessageBox.Show(
                                "Vui lòng nhập đầy đủ thông tin trước khi lưu",
                                "Thông báo",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                    txtCode.SelectAll();
                    txtCode.Focus();
                    return;
                }
            }
            #endregion


            Investors item = MasterId <= 0 ? new Investors() : ClsInvestors.SelectByPk(MasterId);
                
            item.InvID = MasterId;
            item.InvCode = String.Format("{0}", txtCode.EditValue);
            item.InvName = String.Format("{0}", txtName.EditValue);
            item.InvAddress = String.Format("{0}", txtAddress.EditValue);
            item.InvRepresentative = String.Format("{0}", txtDescription.EditValue);
            
            
            try
            {
                if (MasterId > 0)
                {
                    ClsInvestors.Update(item);;
                }
                else
                {
                    ClsInvestors.Insert(item);
                    MasterId = item.InvID;
                }

                btnPrint.Enabled = btnDelete.Enabled = MasterId > 0;
                if (SaveNew)
                {
                    BlankForm();

                    txtCode.Focus();
                    MasterId = 0;
                }
                else if (SaveClose)
                {
                    Close();
                }


            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(
                    String.Format("Có lỗi xảy ra trong quá trình cập nhật dữ liệu. {0}", ex.Message),
                    "Thông báo",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
        }

        private void DoDelete()
        {
            if (MasterId <= 0) return;
            
            try
            {
                if (
                        XtraMessageBox.Show(
                                        "Bạn có muốn xóa bản ghi này không?",
                                        "Thông báo",
                                        MessageBoxButtons.YesNo,
                                        MessageBoxIcon.Question) == DialogResult.No) return;
                ClsInvestors.DeleteByPk(MasterId);
                Close();
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(
                       "Có lỗi xảy ra trong quá trình xóa dữ liệu. " + ex.Message,
                       "Thông báo",
                       MessageBoxButtons.OK,
                       MessageBoxIcon.Error);
            }
        }

        #endregion

        #region "Form Event"
        private void FrmDictDetailLoad(object sender, EventArgs e)
        {
            BlankForm();
            if (!String.IsNullOrEmpty(FormXtraLayoutTemplate))
            {
                var fileLayout = ClsVariable.GetRestoreLayoutFullPath(FormXtraLayoutTemplate);
                layoutControl.RestoreLayoutFromXml(fileLayout);
            }
            if (MasterId > 0) GetDetail();
            if (OnlyView)
            {
                btnSaveNew.Enabled = false;
                btnSave.Enabled = false;
                btnSaveClose.Enabled = false;
                btnDelete.Enabled = false;
                btnPrint.Enabled = false;
                btnDesign.Enabled = false;
                btnRefresh.Enabled = false;
            }
        }
        #endregion

        #region "Toolbar Event"
        private void TbMenuItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            switch (e.Item.Name)
            {
                case "btnSave":
                    DoSave();
                    break;
                case "btnSaveNew"://Lưu và thêm mới
                    SaveNew = true;
                    DoSave();
                    break;
                case "btnSaveClose"://Lưu và đóng
                    SaveClose = true;
                    DoSave();
                    break;
                case "btnDelete":
                    DoDelete();
                    break;
                case "btnDesign":
                    break;
                case "btnRefresh"://Nạp lại danh mục
                    break;
                case "btnHistory"://History
                    break;
                case "btnClose":
                    Close();
                    break;
            }
        }
        #endregion
    }
}
